package com.lbd99.data.utils;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;
import org.apache.log4j.Logger;

/**
 * @author
 * @version
 */
public class SystemProperty {

	private static Logger logger = Logger.getLogger(SystemProperty.class);
	/**
	 * 读取属性文件中相应键的值
	 * @param key 主键
	 * @return String
	 */
	public static String getKeyValue(String key, String filePath){
		String result="";
		try {
			InputStream in = new SystemProperty().getClass().getClassLoader().getResourceAsStream(filePath);
			Properties props = new Properties();
			props.load(in);
			result=props.getProperty(key);
		} catch (Exception e) {
			logger.info("读取properties文件失败:"+e);
		}
		return result;
	}

	/**
	 * 更新（或插入）一对properties信息(主键及其键值) 
	 * 如果该主键已经存在，更新该主键的值； 如果该主键不存在，则插件一对键值。
	 * @param keyname
	 *            键名
	 * @param keyvalue
	 *            键值
	 */
	public static void writeProperties(String keyname, String keyvalue, String filePath) {
		try {
			Properties props = new Properties();
			InputStream in = new SystemProperty().getClass().getClassLoader().getResourceAsStream(filePath);
			props.load(in);
			// 调用 Hashtable 的方法 put，使用 getProperty 方法提供并行性。
			// 强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。
			OutputStream fos = null;
			String targetPath = (new SystemProperty()).getClass().getResource("/").getPath() + filePath;
			fos = new FileOutputStream(targetPath);

			props.setProperty(keyname, keyvalue);
			// 以适合使用 load 方法加载到 Properties 表中的格式，
			// 将此 Properties 表中的属性列表（键和元素对）写入输出流
			props.store(fos, "Update '" + keyname + "' value");
		} catch (IOException e) {
			logger.info("属性文件更新错误:"+e);
		}
	}


	// 测试代码
	public static void main(String[] args)  throws Exception{
		//System.out.println(getKeyValue("caiwenhong", "ini.properties")+"*********1*********");
		//writeProperties("lzx5", "05", "ini.properties");
		//System.out.println("操作完成");
	}
}
